"""
主要对appium 进行管理。
比如启动appium
停止appium
"""
import subprocess
import os,time
# 存放目录

def check_port():
    """
    检查端口
    :return:
    """
    import socket
    count = 0
    while True:
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect(('127.0.0.1', 4723))
            s.shutdown(2)
            print('连接成功，端口已经启动')
            return True
        except ConnectionRefusedError:
            # 设置最长等待10秒
            if count >= 20:
                print("超过最长等待时间，服务还未启动。请联系管理员")
                return False
            print('服务还未启动，0.5秒后重试')
            import time
            time.sleep(0.5)
            count = count + 1



def start_appium():
    logsdir = os.path.join(os.path.dirname(__file__),'../logs')
    if not os.path.exists(logsdir):
        os.mkdir(logsdir)

    cur_day = time.strftime('%Y_%m_%d')
    normal_log =os.path.join(logsdir,cur_day+"normal.log")
    error_log = os.path.join(logsdir,cur_day+"error.log")

    # 通过子进程方式启动appium 启动之后，appium服务器有没有起来在不同电脑上不一样。
    subprocess.Popen('appium',shell=True,
                stdout=open(normal_log,mode='a',encoding='utf8'),
                stderr=open(error_log,mode='a',encoding='utf8'))
    # 添加等待时间，一直等到 服务能够启动成功。 检查4723 端口是否已经打开，如果没有打开，等待0.5秒， 再次检查，一直到打开结束。
    if check_port():
        print('appium 正常启动')
    else:
        print('appium 启动异常')






def stop_appium():
    """
    执行 netstat -ano | findstr 4723  找到进程号
    再执行 taskkill -f -pid pid  杀掉进程
    :return:
    """

    proc = subprocess.Popen('netstat -ano | findstr 4723 ',stdout=subprocess.PIPE,encoding='utf8',shell=True)
    for line in proc.stdout.readlines():
        print(line,type(line))
        if "LISTENING" in line:
            array_line = line.split('LISTENING')
            print(array_line)
            pid = array_line[-1].strip()
            print('进程号',pid)
            # 执行杀掉进程的操作
            os.system(f'taskkill -f -pid {pid}')

if __name__ == '__main__':
    stop_appium()
